package py.progweb.sgc.gui.client.dialog;

import java.util.Date;
import java.util.List;

import py.progweb.sgc.gui.client.service.DialogModelService;
import py.progweb.sgc.gui.client.service.DialogModelServiceAsync;
import py.progweb.sgc.gui.client.service.PagoService;
import py.progweb.sgc.gui.client.service.PagoServiceAsync;
import py.progweb.sgc.gui.shared.dialogmodel.CajasModel;
import py.progweb.sgc.gui.shared.dialogmodel.CajerosModel;
import py.progweb.sgc.gui.shared.dialogmodel.ClientesModel;
import py.progweb.sgc.gui.shared.dialogmodel.DataRecord;
import py.progweb.sgc.gui.shared.dialogmodel.FacturasModel;
import py.progweb.sgc.gui.shared.dialogmodel.VendedoresModel;
import py.progweb.sgc.gui.shared.dialogmodel.VentasModel;
import py.progweb.sgc.model.Caja;
import py.progweb.sgc.model.Cajero;
import py.progweb.sgc.model.Cliente;
import py.progweb.sgc.model.Factura;
import py.progweb.sgc.model.Pago;
import py.progweb.sgc.model.Vendedor;
import py.progweb.sgc.model.Venta;

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.DateDisplayFormat;
import com.smartgwt.client.widgets.form.fields.DateItem;
import com.smartgwt.client.widgets.form.fields.TextItem;

public class FormularioPago extends FormularioBase {
	
	Pago pago = new Pago();
	
	TextItem factura, cajero, monto;
	DateItem fecha;
	
	List<DataRecord> listCajeros;
	List<DataRecord> listCajas;
	List<DataRecord> listFacturas;
	List<DataRecord> listVentas;
	List<DataRecord> listVendedores;
	List<DataRecord> listClientes;
	
	PagoServiceAsync pagoService;
	
	DialogModelServiceAsync service;
	DialogModelServiceAsync service1;
	DialogModelServiceAsync service2;
	DialogModelServiceAsync service3;
	DialogModelServiceAsync service4;
	DialogModelServiceAsync service5;
	
	public FormularioPago(VentanaBase padre) {
		super("Pagos", padre);
		
		fecha = new DateItem();
		fecha.setTitle("Fecha");
		fecha.setDateFormatter(DateDisplayFormat.TOEUROPEANSHORTDATE);
		fecha.setDefaultValue(new Date());
		
		factura = new TextItem();
		factura.setTitle("NroFactura");
		factura.setRequired(true);		

		cajero = new TextItem();
		cajero.setTitle("Cajero");
		cajero.setRequired(true);
		
		monto = new TextItem();
		monto.setTitle("Monto");
		monto.setRequired(true);
		
		service = GWT.create(DialogModelService.class);
		service.getCajerosListadoModel(new AsyncCallback<CajerosModel>(){
			@Override
			public void onFailure(Throwable arg0) {
				// TODO Auto-generated method stub
				Window.alert(arg0.getMessage());
			}

			@Override
			public void onSuccess(CajerosModel arg0) {
				// TODO Auto-generated method stub
				FormularioPago.this.listCajeros = arg0.getRecords();
			}
			
		});		
		
		service1 = GWT.create(DialogModelService.class);
		service1.getCajasListadoModel(new AsyncCallback<CajasModel>(){

			@Override
			public void onFailure(Throwable arg0) {
				// TODO Auto-generated method stub
				Window.alert(arg0.getMessage());
			}

			@Override
			public void onSuccess(CajasModel arg0) {
				FormularioPago.this.listCajas = arg0.getRecords();
			}
			
		});		
		
		service2 = GWT.create(DialogModelService.class);
		service2.getFacturasListadoModel(new AsyncCallback<FacturasModel>(){

			@Override
			public void onFailure(Throwable arg0) {
				// TODO Auto-generated method stub
				Window.alert(arg0.getMessage());
			}

			@Override
			public void onSuccess(FacturasModel arg0) {
				FormularioPago.this.listFacturas = arg0.getRecords();
			}
			
		});		
		
		service3 = GWT.create(DialogModelService.class);
		service3.getVentasListadoModel(new AsyncCallback<VentasModel>(){

			@Override
			public void onFailure(Throwable arg0) {
				// TODO Auto-generated method stub
				Window.alert(arg0.getMessage());
			}

			@Override
			public void onSuccess(VentasModel arg0) {
				FormularioPago.this.listVentas = arg0.getRecords();
			}
			
		});		
		
		service4 = GWT.create(DialogModelService.class);
		service4.getVendedoresListadoModel(new AsyncCallback<VendedoresModel>(){

			@Override
			public void onFailure(Throwable arg0) {
				// TODO Auto-generated method stub
				Window.alert(arg0.getMessage());
			}

			@Override
			public void onSuccess(VendedoresModel arg0) {
				FormularioPago.this.listVendedores = arg0.getRecords();
			}
			
		});		
		
		service5 = GWT.create(DialogModelService.class);
		service5.getClientesListadoModel(new AsyncCallback<ClientesModel>(){

			@Override
			public void onFailure(Throwable arg0) {
				// TODO Auto-generated method stub
				Window.alert(arg0.getMessage());
			}

			@Override
			public void onSuccess(ClientesModel arg0) {
				FormularioPago.this.listClientes = arg0.getRecords();
			}
			
		});		

		this.setItems(factura, fecha, cajero, monto);

		pagoService = GWT.create(PagoService.class);
		//abmService1 = GWT.create(ABMService.class);
	}
	
	@Override
	public void reset() {
		factura.setValue("");
		cajero.setValue("");
		monto.setValue("");
	}
	
	@Override
	protected void guardar() {
		String seleccion = cajero.getValue().toString();
		String seleccion1 = factura.getValue().toString();
		Factura f = new Factura();
		Venta v = new Venta();
		Cliente client = new Cliente();
		Vendedor vendedor = new Vendedor();
		Cajero c = new Cajero();
		Caja caja = new Caja();	
		
		List<DataRecord> lista = this.listCajeros;
		for(DataRecord dr: lista){
			dr.setClassName(Cajero.class.getName());
			dr.setPK((Integer)dr.getAtributo("codUsuario"));
		}		
		for(DataRecord item:lista){
				if (item.getPK().toString().equals(seleccion)){
					c.setCodUsuario((Integer)item.getPK());
					c.setNombre(item.getAtributo("nombre").toString());	
					c.setApellido(item.getAtributo("apellido").toString());
					c.setDireccion(item.getAtributo("direccion").toString());
					c.setTelefono(item.getAtributo("telefono").toString());
					c.setCedula((Integer)item.getAtributo("cedula"));
					c.setUsername(item.getAtributo("username").toString());
					c.setPassword(item.getAtributo("password").toString());
					for(DataRecord item1: this.listCajas){
						if (item1.getPK().toString()== item.getAtributo("caja.codCajaPk").toString()){
							caja.setCodCajaPk((Integer)item1.getPK());
							caja.setDescripcion(item1.getAtributo("descripcion").toString());
						}					
					}
					c.setCaja(caja);
				}
		}
		
		List<DataRecord> lista1 = this.listFacturas;
		for(DataRecord dr1: lista1){
			dr1.setClassName(Venta.class.getName());
			dr1.setPK((Integer)dr1.getAtributo("codVentaPK"));
		}		
		for(DataRecord dr2: lista1){
			dr2.setClassName(Factura.class.getName());
			dr2.setPK((Integer)dr2.getAtributo("codFacturaPk"));
		}
		
		List<DataRecord> lista2 = this.listVentas;
		List<DataRecord> lista3 = this.listClientes;
		List<DataRecord> lista4 = this.listVendedores;
		
		for(DataRecord it: lista1){	
			if (it.getPK().toString().equals(seleccion1)){
				
				f.setCodFacturaPk((Integer)it.getPK());
				f.setSaldo((Integer)it.getAtributo("saldo"));
				f.setEstado(it.getAtributo("estado").toString());
				
				
				for(DataRecord dr3: lista2){
					dr3.setClassName(Venta.class.getName());
					dr3.setPK((Integer)dr3.getAtributo("codVentaPK"));
				}		
				
				
				for(DataRecord it1: lista2 ){
					
					if (it1.getPK().toString()== it.getAtributo("venta.codVentaPK").toString()){
						v.setCodVentaPK((Integer)it1.getPK());
						v.setFecha((Date)it1.getAtributo("fecha"));
						for(DataRecord it2:lista3){
							
							if (it2.getPK().toString()== it1.getAtributo("cliente.codClientePk").toString()){
								
								client.setCodClientePk((Integer)it2.getPK());
								client.setNombre(it2.getAtributo("nombre").toString());
								client.setApellido(it2.getAtributo("apellido").toString());
								client.setDireccion(it2.getAtributo("direccion").toString());
								client.setTelefono(it2.getAtributo("telefono").toString());
							}
						}
						v.setCliente(client);
						
						for (DataRecord item3: lista4){
						
							if (item3.getPK().toString()== it1.getAtributo("vendedor.codUsuario").toString()){
								
								vendedor.setCodUsuario((Integer)item3.getPK());
								vendedor.setNombre(item3.getAtributo("nombre").toString());	
								vendedor.setApellido(item3.getAtributo("apellido").toString());
								vendedor.setDireccion(item3.getAtributo("direccion").toString());
								vendedor.setTelefono(item3.getAtributo("telefono").toString());
								vendedor.setCedula((Integer)item3.getAtributo("cedula"));
								vendedor.setUsername(item3.getAtributo("username").toString());
								vendedor.setPassword(item3.getAtributo("password").toString());
							}
						}
						v.setVendedor(vendedor);
					}
				}
			f.setVenta(v);
			}
		}
		
		pago.setFactura(f);
		pago.setFecha((Date)fecha.getValue());
		pago.setCajero(c);
		pago.setMonto(Integer.parseInt(monto.getValue().toString()));
		pago.setEstado("abierto");
		
		pagoService.guardar(pago, callback);
		
	}
	
	public void setData(DataRecord dr) {
		factura.setValue(dr.getAtributo("codFacturaPk").toString());
	}


}
